home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 December / 2004-12 CHIP.iso / CHIP / Porady / Srodowisko PHP-MySQL / WAMP5 1.3 / wamp5_1.3.exe / {app} / php / PEAR / go-pear.php
PHP Script  |  2004-09-24  |  70KB  |  2,326 lines

  1. <?php //; echo; echo "YOU NEED TO RUN THIS SCRIPT WITH PHP NOW!"; echo; echo "Try this: lynx -source http://pear.php.net/go-pear | php -q"; echo; exit # -*- PHP -*-
  2. # +----------------------------------------------------------------------+
  3. # | PHP Version 4                                                        |
  4. # +----------------------------------------------------------------------+
  5. # | Copyright (c) 1997-2002 The PHP Group                                |
  6. # +----------------------------------------------------------------------+
  7. # | This source file is subject to version 2.02 of the PHP license,      |
  8. # | that is bundled with this package in the file LICENSE, and is        |
  9. # | available at through the world-wide-web at                           |
  10. # | http://www.php.net/license/2_02.txt.                                 |
  11. # | If you did not receive a copy of the PHP license and are unable to   |
  12. # | obtain it through the world-wide-web, please send a note to          |
  13. # | license@php.net so we can mail you a copy immediately.               |
  14. # +----------------------------------------------------------------------+
  15. # | Authors: Tomas V.V.Cox <cox@idecnet.com>                             |
  16. # |          Stig Sµther Bakken <stig@php.net>                           |
  17. # |             Christian Dickmann <dickmann@php.net>                         |
  18. # |             Pierre-Alain Joye <pajoye@pearfr.org>                         |
  19. # +----------------------------------------------------------------------+
  20. # $Id: go-pear,v 1.57 2004/02/15 00:49:10 pajoye Exp $
  21. #
  22. # Automatically download all the files needed to run the "pear" command
  23. # (the PEAR package installer).  Requires PHP 4.1.0 or newer.
  24. #
  25. # Installation: Linux
  26. #
  27. # This script can either be directly launched or passed via lynx like this.
  28. #
  29. #  $ lynx -source http://pear.php.net/go-pear | php
  30. #
  31. # The above assumes your php binary is named php and that it's
  32. # executable through your PATH:
  33. #
  34. # Installation: Windows
  35. #
  36. # On Windows, go-pear uses stdin for user input, so you must download
  37. # go-pear first and then run it:
  38. #
  39. # Note: In PHP 4.2.0-4.2.3, the PHP CLI binary is named php-cli.exe while since
  40. # PHP 4.3.0, it's simply named php.exe in the cli/ folder of your PHP directory.
  41. # The CGI is also named php.exe but it sits directly in your PHP directory.
  42. #
  43. #  > cli/php -r "readfile('http://pear.php.net/go-pear');" > go-pear
  44. #  > cli/php go-pear
  45. #
  46. # Installation: Notes
  47. #
  48. # - If using the CGI version of PHP, append the -q option to suppress
  49. #   headers in the output.
  50. # - Once the go-pear script is initiated, you will see instructions on
  51. #   how to continue installing PEAR.  The first thing you should see is:
  52. #
  53. #   Welcome to go-pear!
  54. #
  55. # Installation: Web browser
  56. #
  57. # You can now use go-pear via a webbrowser, thanks to Christian Dickmann. It is
  58. # still beta codes, but feel free to test it:
  59. # 1.: Download the go-pear script by using the "Save target as ..." function
  60. # of your browser here.
  61. #
  62. # 2.: Place the go-pear file somewhere under the document root of your webserver.
  63. # The easiest way is to create a new directory for pear and to put the file in there.
  64. # Be sure your web server is setup to recognize PHP, and that you use an appropriate
  65. # extension.  For example, you might name this file gopear.php
  66. #
  67. # 3.: Access go-pear through your webserver and follow the instructions. Please
  68. # make sure that PHP has write access to the dir you want to install PEAR into.
  69. # For example: http://localhost/pear/gopear.php
  70. #
  71. # 4.: After running go-pear you get a link to the Web Frontend of the PEAR installer.
  72. # I suggest bookmarking this link.
  73. #
  74. # 5.: Protect the Web Frontend directory and the go-pear script with a password.
  75. # Use .htaccess on Apache webservers for example.
  76. #
  77. #
  78. $sapi_name = php_sapi_name();
  79. set_time_limit(0);
  80. @ob_end_clean();
  81. ob_implicit_flush(true);
  82. define('WEBINSTALLER', (php_sapi_name() != 'cli' && !( substr(php_sapi_name(),0,3)=='cgi' && !isset($_SERVER['GATEWAY_INTERFACE']))));
  83.  
  84. ini_set('track_errors', true);
  85. ini_set('html_errors', WEBINSTALLER);
  86. ini_set('magic_quotes_runtime', false);
  87. error_reporting( E_ALL & ~E_NOTICE);
  88. define('WINDOWS', (substr(PHP_OS, 0, 3) == 'WIN'));
  89. define('GO_PEAR_VER', '0.2.2');
  90.  
  91. define('WIN32GUI', !WEBINSTALLER && WINDOWS && php_sapi_name()== 'cli' && which('cscript'));
  92.  
  93. /**
  94.  * See bug #23069
  95.  */
  96.  
  97. if ( WEBINSTALLER && WINDOWS ) {
  98.     $php_sapi_name = win32DetectPHPSAPI();
  99.     if($php_sapi_name=='cgi'){
  100.     $msg = nl2br("
  101. Sorry! The PEAR installer actually does not work on Windows platform using CGI and Apache.
  102. Please install the module SAPI (see http://www.php.net/manual/en/install.apache.php for the
  103. instructions) or use the CLI (cli\php.exe) in the console.
  104. ");
  105.         displayHTML('error', $msg);
  106.     }
  107. }
  108.  
  109. if (WEBINSTALLER && isset($_GET['action']) && $_GET['action'] == 'img' && isset($_GET['img'])) {
  110.     switch ($_GET['img'])
  111.     {
  112.         case 'note':
  113.         case 'pearlogo':
  114.         case 'smallpear':
  115.             showImage($_GET['img']);
  116.             exit;
  117.         default:
  118.             exit;
  119.     };
  120. }
  121.  
  122. // Check if PHP version is sufficient
  123. if (function_exists("version_compare") && version_compare(phpversion(), "4.2.0",'<')) {
  124.     die("Sorry!  Your PHP version is too old.  PEAR and this script requires at
  125. least PHP 4.2.0 for stable operation.
  126.  
  127. It may be that you have a newer version of PHP installed in your web
  128. server, but an older version installed as the 'php' command.  In this
  129. case, you need to rebuilt PHP from source.
  130.  
  131. If your source is 4.2.x, you need to run 'configure' with the
  132. --enable-cli option, rebuild and copy sapi/cli/php somewhere.
  133.  
  134. If your source is 4.3.x or newer, just make sure you don't run
  135. 'configure' with --disable-cli, rebuilt and copy sapi/cli/php.
  136.  
  137. Please upgrade PHP to a newer version, and try again.  See you then.
  138.  
  139. ");
  140. }
  141.  
  142. $installer_packages = array(
  143.     'PEAR',
  144.     'Archive_Tar',
  145.     'Console_Getopt',
  146.     'XML_RPC'
  147.     );
  148. if (WEBINSTALLER) {
  149.     $installer_packages[] = 'Pager';
  150.     $installer_packages[] = 'HTML_Template_IT';
  151.     $installer_packages[] = 'Net_UserAgent_Detect';
  152.     $installer_packages[] = 'PEAR_Frontend_Web';
  153. }
  154. $version_n = explode(".",phpversion());
  155. if ($version_n[0]=="4") {
  156.     $pfc_packages = array(
  157.         'DB',
  158.         'Net_Socket',
  159.         'Net_SMTP',
  160.         'Mail',
  161.         'XML_Parser',
  162.         'PHPUnit-0.6.2'
  163.         );
  164. } else {
  165.     $pfc_packages = array(
  166.         'DB',
  167.         'Net_Socket',
  168.         'Net_SMTP',
  169.         'Mail',
  170.         'XML_Parser',
  171.         'PHPUnit'
  172.         );
  173. }
  174. $config_desc = array(
  175.     'prefix' => 'Installation prefix',
  176.     'bin_dir' => 'Binaries directory',
  177.     'php_dir' => 'PHP code directory ($php_dir)',
  178.     'doc_dir' => 'Documentation base directory',
  179.     'data_dir' => 'Data base directory',
  180.     'test_dir' => 'Tests base directory',
  181. );
  182. if(!WEBINSTALLER && WINDOWS){
  183.     $config_desc['php_bin'] = 'php.exe path';
  184. }
  185. if (WEBINSTALLER) {
  186.     $config_desc['cache_dir'] = 'PEAR Installer cache directory';
  187.     $config_desc['cache_ttl'] = 'Cache TimeToLive';
  188.     $config_desc['webfrontend_file'] = 'Filename of WebFrontend';
  189.     $config_desc['php_bin'] = "php.exe path, optional (CLI command tools)";
  190. }
  191.  
  192. if (my_env('HTTP_PROXY')) {
  193.     $http_proxy = my_env('HTTP_PROXY');
  194. } elseif (my_env('http_proxy')) {
  195.     $http_proxy = my_env('http_proxy');
  196. } else {
  197.     $http_proxy = '';
  198. }
  199.  
  200. register_shutdown_function('bail');
  201.  
  202. detect_install_dirs();
  203.  
  204. if (WEBINSTALLER) {
  205.     @session_start();
  206.  
  207.     /*
  208.         See bug #23069
  209.     */
  210.     if ( WINDOWS ) {
  211.         $php_sapi_name = win32DetectPHPSAPI();
  212.         if($php_sapi_name=='cgi'){
  213.             $msg = "
  214.     Sorry! The PEAR installer actually does not work on Windows platform using CGI and Apache.
  215.     Please install the module SAPI (see http://www.php.net/manual/en/install.apache.php for the
  216.     instructions) or use the CLI (cli\php.exe) in the console.
  217.     ";
  218.             displayHTML('error', $msg);
  219.             exit();
  220.         }
  221.     }
  222.  
  223.     if (!isset($_SESSION['go-pear']) || isset($_GET['restart'])) {
  224.         $sep = WINDOWS ? "\\" : '/';
  225.         $_SESSION['go-pear'] = array(
  226.             'http_proxy' => $http_proxy,
  227.             'config' => array(
  228.                 'prefix' => dirname(__FILE__),
  229.                 'bin_dir' => $bin_dir,
  230.                 'php_bin' => $php_bin,
  231.                 'php_dir' => '$prefix'.$sep.'PEAR',
  232.                 'doc_dir' => $doc_dir,
  233.                 'data_dir' => $data_dir,
  234.                 'test_dir' => $test_dir,
  235.                 'cache_dir' => '$php_dir'.$sep.'cache',
  236.                 'cache_ttl' => 300,
  237.                 'webfrontend_file' => '$prefix'.$sep.'index.php',
  238.                 ),
  239.             'install_pfc' => true,
  240.             'DHTML' => true,
  241.             );
  242.     }
  243.     if (!isset($_GET['step'])) {
  244.         $_GET['step'] = 'Welcome';
  245.         /* clean up old sessions datas */
  246.         session_destroy();
  247.     }
  248.     if ($_GET['step'] == 'install') {
  249.         $_SESSION['go-pear']['http_proxy'] = strip_magic_quotes($_POST['proxy']['host']).':'.strip_magic_quotes($_POST['proxy']['port']);
  250.         if ($_SESSION['go-pear']['http_proxy'] == ':') {
  251.             $_SESSION['go-pear']['http_proxy'] = '';
  252.         };
  253.  
  254.         $www_errors = array();
  255.         foreach($_POST['config'] as $key => $value) {
  256.             $_POST['config'][$key] = strip_magic_quotes($value);
  257.             if($key!='cache_ttl'){
  258.                 if( ereg(' ', $_POST['config'][$key]) ) {
  259.                     $www_errors[$key] = 'Spaces are not allowed in pathes. Please choose another path.';
  260.                 } elseif ( empty($_POST['config'][$key]) ) {
  261.                     $www_errors[$key] = 'Please fill this path, you can use $prefix, $php_dir or a full path.';
  262.                 }
  263.             }
  264.         }
  265.  
  266.         if( sizeof($www_errors)>0){
  267.             $_GET['step'] = 'config';
  268.         }
  269.  
  270.         $_SESSION['go-pear']['config'] = $_POST['config'];
  271.         $_SESSION['go-pear']['install_pfc'] = (isset($_POST['install_pfc']) && $_POST['install_pfc'] == 'on');
  272.         $_SESSION['go-pear']['DHTML'] = !($_POST['BCmode'] == "on");
  273.     }
  274.  
  275.     $http_proxy = $_SESSION['go-pear']['http_proxy'];
  276.     foreach($_SESSION['go-pear']['config'] as $var => $value) {
  277.         $$var = $value;
  278.     }
  279.     $install_pfc = $_SESSION['go-pear']['install_pfc'];
  280. }
  281.  
  282. if (!WEBINSTALLER) {
  283.     $tty = WINDOWS ? @fopen('\con', 'r') : @fopen('/dev/tty', 'r');
  284.  
  285.     if (!$tty) {
  286.         $tty = fopen('php://stdin', 'r');
  287.     }
  288.  
  289.     print "Welcome to go-pear!
  290.  
  291. Go-pear will install the 'pear' command and all the files needed by
  292. it.  This command is your tool for PEAR installation and maintenance.
  293.  
  294. Go-pear also lets you download and install the PEAR packages bundled
  295. with PHP: " . implode(', ', $pfc_packages) . ".
  296.  
  297. If you wish to abort, press Control-C now, or press Enter to continue: ";
  298.  
  299.     fgets($tty, 1024);
  300.  
  301.     print "\n";
  302.  
  303.         print "HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none:";
  304.  
  305.     if (!empty($http_proxy)) {
  306.         print " [$http_proxy]";
  307.     }
  308.     print ": ";
  309.     $tmp = trim(fgets($tty, 1024));
  310.     if (!empty($tmp)) {
  311.         $http_proxy = $tmp;
  312.     }
  313. }
  314.  
  315. $origpwd = getcwd();
  316.  
  317. $config_vars = array_keys($config_desc);
  318.  
  319. // make indices run from 1...
  320. array_unshift($config_vars, "");
  321. unset($config_vars[0]);
  322. reset($config_vars);
  323. $desclen = max(array_map('strlen', $config_desc));
  324. $descfmt = "%-{$desclen}s";
  325. $first = key($config_vars);
  326. end($config_vars);
  327. $last = key($config_vars);
  328.  
  329. if (WEBINSTALLER) {
  330.     if ( isset($www_errors) && sizeof($www_errors) ) {
  331.         displayHTML('config');
  332.         exit();
  333.     } else {
  334.         if (isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'] == true && $_GET['step'] == 'install') {
  335.             $_GET['step'] = 'preinstall';
  336.         }
  337.         if ($_GET['step'] != 'install' && $_GET['step'] != 'install-progress') {
  338.             displayHTML($_GET['step']);
  339.             exit;
  340.         }
  341.         if ($_GET['step'] == 'install-progress') {
  342.             displayHTMLHeader();
  343.             echo "Starting installation ...<br/>";
  344.         }
  345.         ob_start();
  346.     }
  347. }
  348.  
  349. $progress = 0;
  350.  
  351. /*
  352.  * Checks PHP SAPI version under windows/CLI
  353.  */
  354. if( WINDOWS && !WEBINSTALLER && $php_bin=='') {
  355.     print "
  356. We do not find any php.exe, please select the php.exe folder (CLI is
  357. recommanded, usually in c:\php\cli\php.exe)
  358. ";
  359.     $php_bin_set = false;
  360. } elseif ( WINDOWS && !WEBINSTALLER && strlen($php_bin) ) {
  361.     $php_bin_sapi = win32DetectPHPSAPI();
  362.     $php_bin_set = true;
  363.     switch($php_bin_sapi){
  364.         case 'cli':
  365.         break;
  366.         case 'cgi':
  367.             print "
  368. *NOTICE*
  369. We found php.exe under $php_bin, it uses a $php_bin_sapi SAPI. PEAR commandline
  370. tool works well with it, if you have a CLI php.exe available, we
  371. recommand to use it.
  372. ";
  373.         break;
  374.         default:
  375.             print "
  376. *WARNING*
  377. We found php.exe under $php_bin, it uses an unknown SAPI. PEAR commandline
  378. tool has not been tested with it, if you have a CLI (or CGI) php.exe available,
  379. we strongly recommand to use it.
  380.  
  381. ";
  382.         break;
  383.     }
  384. }
  385.  
  386. ####
  387. # Temp stuff
  388. ####
  389.  
  390. $foo = tmp_dir();
  391. $ptmp = tempnam($foo, 'gope');
  392. if (WINDOWS) {
  393.     $ptmp = str_replace($foo,'',$ptmp);
  394.     $foo=str_replace("\\\\",'/',$foo);
  395.     $s = substr($ptmp,0,1);
  396.     if($s=="\\" || $s=='/' ){
  397.         $ptmp = $foo.'/'.substr($ptmp,1);
  398.     } else {
  399.         $ptmp = $foo.'/'.$ptmp;
  400.     }
  401. }
  402.  
  403. rm_rf($ptmp);
  404. mkdir_p($ptmp, 0700);
  405. $ok = @chdir($ptmp);
  406.  
  407. // If for some reason the user has no rights to access to
  408. // the standard tempdir, we assume that he has the right
  409. // to access his prefix and choose $prefix/tmp as tempdir
  410. if (!$ok) {
  411.     print "System's Tempdir failed, trying to use \$prefix/tmp ...";
  412.     $res = mkdir_p($prefix.'/tmp');
  413.     if (!$res) {
  414.         bail('mkdir '.$prefix.'/tmp'.' ... failed');
  415.     }
  416.     $ptmp = tempnam($prefix.'/tmp', 'gope');
  417.  
  418.     rm_rf($ptmp);
  419.     mkdir_p($ptmp, 0700);
  420.     $ok = @chdir($ptmp);
  421.  
  422.     if (!$ok) { // This should not happen, really ;)
  423.         bail('chdir '.$ptmp.' ... failed');
  424.     }
  425.  
  426.     print "ok\n";
  427.  
  428.     // Adjust TEMPDIR envvars
  429.     if (!isset($_ENV)) {
  430.         $_ENV = array();
  431.     };
  432.     $_ENV['TMPDIR'] = $_ENV['TEMP'] = $prefix.'/tmp';
  433. }
  434.  
  435. while (!WEBINSTALLER) {
  436.     print "
  437. Below is a suggested file layout for your new PEAR installation.  To
  438. change individual locations, type the number in front of the
  439. directory.  Type 'all' to change all of them or simply press Enter to
  440. accept these locations.
  441.  
  442. ";
  443.     if( WINDOWS && $php_bin=='' ){
  444.  
  445.     }
  446.     foreach ($config_vars as $n => $var) {
  447.         printf("%2d. $descfmt : %s\n", $n, $config_desc[$var], $$var);
  448.     }
  449.     print "\n$first-$last, 'all' or Enter to continue: ";
  450.     $tmp = trim(fgets($tty, 1024));
  451.     if ( empty($tmp) ) {
  452.         if( WINDOWS && !$php_bin_set ){
  453.             echo "**ERROR**
  454. Please, enter the php.exe path.
  455.  
  456. ";
  457.         } else {
  458.             break;
  459.         }
  460.     }
  461.     if (isset($config_vars[(int)$tmp])) {
  462.         $var = $config_vars[(int)$tmp];
  463.         $desc = $config_desc[$var];
  464.         $current = $$var;
  465.         if(WIN32GUI){
  466.             $tmp = win32BrowseForFolder("$desc [$current] :");
  467.         } else {
  468.             print "$desc [$current] : ";
  469.             $tmp = trim(fgets($tty, 1024));
  470.         }
  471.         $old = $$var;
  472.         if(WINDOWS && $var=='php_bin' ){
  473.             if(file_exists($tmp.DIRECTORY_SEPARATOR.'php.exe')){
  474.                 $tmp = $tmp.DIRECTORY_SEPARATOR.'php.exe';
  475.                 $php_bin_sapi = win32DetectPHPSAPI();
  476.                 if($php_bin_sapi=='cgi'){
  477.             print "
  478. ******************************************************************************
  479. NOTICE! We found php.exe under $php_bin, it uses a $php_bin_sapi SAPI.
  480. PEAR commandline tool works well with it.
  481. If you have a CLI php.exe available, we recommand to use it.
  482.  
  483. ";
  484.                 } elseif ($php_bin_sapi=='unknown') {
  485.             print "
  486. ******************************************************************************
  487. WARNING! We found php.exe under $php_bin, it uses an $php_bin_sapi SAPI.
  488. PEAR commandline tool has not been tested with it.
  489. If you have a CLI (or CGI) php.exe available, we strongly recommand to use it.
  490.  
  491. ";
  492.                 }
  493.                 echo "php.exe (sapi: $php_bin_sapi) found.\n\n";
  494.                 $php_bin_set = true;
  495.             } else {
  496.                 echo "**ERROR**: no php.exe found in this folder.\n";
  497.                 $tmp='';
  498.             }
  499.         }
  500.  
  501.         if (!empty($tmp) ) {
  502.             $$var = $tmp;
  503.         }
  504.     } elseif ($tmp == 'all') {
  505.         foreach ($config_vars as $n => $var) {
  506.             $desc = $config_desc[$var];
  507.             $current = $$var;
  508.             print "$desc [$current] : ";
  509.             $tmp = trim(fgets($tty, 1024));
  510.             if (!empty($tmp)) {
  511.                 $$var = $tmp;
  512.             }
  513.         }
  514.     }
  515. }
  516.  
  517. foreach ($config_vars as $n => $var) {
  518.     foreach ($config_vars as $m => $var2) {
  519.         $$var = str_replace('$'.$var2, $$var2, $$var);
  520.     }
  521. }
  522.  
  523. foreach ($config_vars as $var) {
  524.     $dir = $$var;
  525.     if (!preg_match('/_dir$/', $var)) {
  526.         continue;
  527.     };
  528.     if (!@is_dir($dir)) {
  529.         if (!mkdir_p($dir)) {
  530.             $root = WINDOWS ? 'administrator' : 'root';
  531.             bail("Unable to create {$config_desc[$var]} $dir.
  532. Run this script as $root or pick another location.\n");
  533.         }
  534.     }
  535. }
  536.  
  537. if (!WEBINSTALLER) {
  538.     $msg = "The following PEAR packages are bundled with PHP: " .
  539.         implode(', ', $pfc_packages);
  540.     print "\n" . wordwrap($msg, 75) . ".\n";
  541.     print "Would you like to install these as well? [Y/n] : ";
  542.     $install_pfc = !stristr(fgets($tty, 1024), "n");
  543.     print "\n";
  544. }
  545.  
  546. ####
  547. # Download
  548. ####
  549.  
  550. ini_set("include_path", $ptmp);
  551.  
  552. if (!extension_loaded('zlib') && !WEBINSTALLER) { // In Web context we could be in multithread env which makes dl() end up with a fatal error.
  553.     if (WINDOWS) {
  554.         @dl('php_zlib.dll');
  555.     } elseif (PHP_OS == 'HP-UX') {
  556.         @dl('zlib.sl');
  557.     } elseif (PHP_OS == 'AIX') {
  558.         @dl('zlib.a');
  559.     } else {
  560.         @dl('zlib.so');
  561.     }
  562. }
  563. if (!extension_loaded('zlib')) {
  564.     $urltemplate = 'http://pear.php.net/get/%s?uncompress=yes';
  565.     $have_gzip = false;
  566. } else {
  567.     $urltemplate = 'http://pear.php.net/get/%s';
  568.     $have_gzip = true;
  569. }
  570. print "Loading zlib: ".($have_gzip ? 'ok' : 'failed')."\n";
  571. if (!$have_gzip) {
  572.     print "Downloading uncompressed packages\n";
  573. };
  574.  
  575. if ($install_pfc) {
  576.     $to_install = array_merge($installer_packages, $pfc_packages);
  577. } else {
  578.     $to_install = $installer_packages;
  579. }
  580.  
  581. displayHTMLProgress($progress = 5);
  582.  
  583. if (file_exists(dirname(__FILE__).'/go-pear-bundle') || is_dir(dirname(__FILE__).'/go-pear-bundle')) {
  584.     $dh = @opendir(dirname(__FILE__).'/go-pear-bundle');
  585. }
  586. $local_dir = array();
  587. if ($dh) {
  588.     while($file = @readdir($dh)) {
  589.         if ($file == '.' || $file == '..' || !is_file(dirname(__FILE__).'/go-pear-bundle/'.$file)) {
  590.             continue;
  591.         };
  592.         $local_dir[] = $file;
  593.     };
  594. }
  595.  
  596. foreach ($installer_packages as $pkg) {
  597.     foreach($local_dir as $file) {
  598.         if (substr($file, 0, strlen($pkg)) == $pkg) {
  599.             echo str_pad("Using local package: $pkg", max(38,21+strlen($pkg)+4), '.');
  600.             copy(dirname(__FILE__).'/go-pear-bundle/'.$file, $file);
  601.             $tarball[$pkg] = $file;
  602.             echo "ok\n";
  603.             displayHTMLProgress($progress += round(65 / count($to_install)));
  604.             continue 2;
  605.         };
  606.     };
  607.  
  608.     $msg = str_pad("Downloading package: $pkg", max(38,21+strlen($pkg)+4), '.');
  609.     print $msg;
  610.     $url = sprintf($urltemplate, $pkg);
  611.     $tarball[$pkg] = download_url($url, null, $http_proxy);
  612.     print "ok\n";
  613.     displayHTMLProgress($progress += round(65 / count($to_install)));
  614. }
  615.  
  616. print 'Bootstrapping: PEAR...................';
  617. $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['PEAR'], 5), 0, -4));
  618. $url = "http://cvs.php.net/co.php/php-src/pear/PEAR.php?p=1&r=$r";
  619. if (in_array('Getopt.php', $local_dir)) {
  620.     copy(dirname(__FILE__).'/go-pear-bundle/PEAR.php', 'PEAR.php');
  621.     echo "(local) ";
  622. } else {
  623.     download_url($url, 'PEAR.php', $http_proxy);
  624.     echo "(remote) ";
  625. }
  626.  
  627. include_once 'PEAR.php';
  628. print "ok\n";
  629.  
  630. print 'Bootstrapping: Archive_Tar............';
  631. $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['Archive_Tar'], 12), 0, -4));
  632. $url = "http://cvs.php.net/co.php/pear/Archive_Tar/Archive/Tar.php?p=1&r=$r";
  633. mkdir('Archive', 0700);
  634.  
  635. if (in_array('Getopt.php', $local_dir)) {
  636.     copy(dirname(__FILE__).'/go-pear-bundle/Tar.php', 'Archive/Tar.php');
  637.     echo "(local) ";
  638. } else {
  639.     download_url($url, 'Archive/Tar.php', $http_proxy);
  640.     echo "(remote) ";
  641. }
  642. print "ok\n";
  643.  
  644. print 'Bootstrapping: Console_Getopt.........';
  645. $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['Console_Getopt'], 15), 0, -4));
  646. $url = "http://cvs.php.net/co.php/php-src/pear/Console/Getopt.php?p=1&r=$r";
  647. mkdir('Console', 0700);
  648. if (in_array('Getopt.php', $local_dir)) {
  649.     copy(dirname(__FILE__).'/go-pear-bundle/Getopt.php', 'Console/Getopt.php');
  650.     echo "(local) ";
  651. } else {
  652.     download_url($url, 'Console/Getopt.php', $http_proxy);
  653.     echo "(remote) ";
  654. }
  655. print "ok\n";
  656.  
  657. if ($install_pfc) {
  658.     foreach ($pfc_packages as $pkg) {
  659.         foreach($local_dir as $file) {
  660.             if (substr($file, 0, strlen($pkg)) == $pkg) {
  661.                 echo str_pad("Using local package: $pkg", max(38,21+strlen($pkg)+4), '.');
  662.                 copy(dirname(__FILE__).'/go-pear-bundle/'.$file, $file);
  663.                 $tarball[$pkg] = $file;
  664.                 echo "ok\n";
  665.                 displayHTMLProgress($progress += round(65 / count($to_install)));
  666.                 continue 2;
  667.             };
  668.         };
  669.  
  670.         $msg = str_pad("Downloading package: $pkg", max(38,21+strlen($pkg)+4), '.');
  671.         print $msg;
  672.         $url = sprintf($urltemplate, $pkg);
  673.         $tarball[$pkg] = download_url($url, null, $http_proxy);
  674.         print "ok\n";
  675.         displayHTMLProgress($progress += round(65 / count($to_install)));
  676.     }
  677. }
  678.  
  679. displayHTMLProgress($progress = 70);
  680.  
  681. PEAR::setErrorHandling(PEAR_ERROR_DIE, "\n%s\n");
  682. print 'Extracting installer..................';
  683. $dot = strrpos($tarball['PEAR'], '.');
  684. $pkg = substr($tarball['PEAR'], 0, $dot);
  685. $ext = substr($tarball['PEAR'], $dot+1);
  686.  
  687. include_once 'Archive/Tar.php';
  688. $tar = &new Archive_Tar($tarball['PEAR'], $have_gzip);
  689. if (!$tar->extractModify($ptmp, $pkg)) {
  690.     bail("failed!\n");
  691. }
  692. print "ok\n";
  693.  
  694. $tarball['PEAR'] = 'package.xml'; // :-)
  695.  
  696. include_once "PEAR.php";
  697. include_once "PEAR/Config.php";
  698. include_once "PEAR/Command.php";
  699. include_once "PEAR/Registry.php";
  700.  
  701. if (WEBINSTALLER) {
  702.     $config = &PEAR_Config::singleton($prefix."/pear.conf", '');
  703. } else {
  704.     $config = &PEAR_Config::singleton();
  705. };
  706. $config->set('preferred_state', 'stable');
  707. foreach ($config_vars as $var) {
  708.     $config->set($var, $$var);
  709. }
  710.  
  711. $config->store();
  712.  
  713. $registry = new PEAR_Registry($php_dir);
  714. PEAR_Command::setFrontendType('CLI');
  715. $install = &PEAR_Command::factory('install', $config);
  716. $install_options = array(
  717.     'nodeps' => true,
  718.     'force' => true,
  719.     );
  720. foreach ($tarball as $pkg => $src) {
  721.     $options = $install_options;
  722.     if ($registry->packageExists($pkg)) {
  723.         $options['upgrade'] = true;
  724.     }
  725.  
  726.     $install->run('install', $options, array($src));
  727.  
  728.     displayHTMLProgress($progress += round(29 / count($tarball)));
  729. }
  730.  
  731. displayHTMLProgress($progress = 99);
  732.  
  733. // Base installation finished
  734.  
  735. ini_restore("include_path");
  736.  
  737. if (!WEBINSTALLER) {
  738.     $sep = WINDOWS ? ';' : ':';
  739.     $include_path = explode($sep, ini_get('include_path'));
  740.     if (WINDOWS) {
  741.         $found = false;
  742.         $t = strtolower($php_dir);
  743.         foreach($include_path as $path) {
  744.             if ($t==strtolower($path)) {
  745.                 $found = true;
  746.                 break;
  747.             }
  748.         }
  749.     } else {
  750.         $found = in_array($php_dir, $include_path);
  751.     }
  752.     if (!$found) {
  753.         print "
  754. ******************************************************************************
  755. WARNING!  The include_path defined in the currently used php.ini does not
  756. contain the PEAR PHP directory you just specified:
  757. <$php_dir>
  758. If the specified directory is also not in the include_path used by
  759. your scripts, you will have problems getting any PEAR packages working.
  760. ";
  761.  
  762.         if ( $php_ini = getPhpiniPath() ) {
  763.             print "\n\nWould you like to alter php.ini <$php_ini>? [Y/n] : ";
  764.             $alter_phpini = !stristr(fgets($tty, 1024), "n");
  765.             if( $alter_phpini ) {
  766.                 alterPhpIni($php_ini);
  767.             } else {
  768.                 if (WINDOWS) {
  769.                     print "
  770. Please look over your php.ini file to make sure
  771. $php_dir is in your include_path.";
  772.                 } else {
  773.                     print "
  774. I will add a workaround for this in the 'pear' command to make sure
  775. the installer works, but please look over your php.ini or Apache
  776. configuration to make sure $php_dir is in your include_path.
  777. ";
  778.                 }
  779.  
  780.             }
  781.         }
  782.  
  783.     print "
  784. Current include path           : ".ini_get('include_path')."
  785. Configured directory           : $php_dir
  786. Currently used php.ini (guess) : $php_ini
  787. ";
  788.  
  789.         print "Press Enter to continue: ";
  790.         fgets($tty, 1024);
  791.     }
  792.  
  793.     $pear_cmd = $bin_dir . DIRECTORY_SEPARATOR . 'pear';
  794.     $pear_cmd .= WINDOWS?'.bat':'';
  795.  
  796.     // check that the installed pear and the one in tha path are the same (if any)
  797.     $pear_old = which('pear', $bin_dir);
  798.     if ($pear_old && $pear_old != $pear_cmd) {
  799.         // check if it is a link or symlink
  800.         $islink = WINDOWS ? is_link($pear_old) : false;
  801.         if ($islink && readlink($pear_old) != $pear_cmd) {
  802.             print "\n** WARNING! The link $pear_old does not point to the " .
  803.                   "installed $pear_cmd\n";
  804.         } elseif (is_writable($pear_old)) {
  805.             rename($pear_old, "{$pear_old}_old");
  806.             print "\n** WARNING! Backed up old pear to {$pear_old}_old\n";
  807.         } else {
  808.             print "\n** WARNING! Old version found at $pear_old, please remove it or ".
  809.                   "be sure to use the new $pear_cmd command\n";
  810.         }
  811.     }
  812.  
  813.     print "\nThe 'pear' command is now at your service at $pear_cmd\n";
  814.  
  815.     // Alert the user if the pear cmd is not in PATH
  816.     $old_dir = $pear_old ? dirname($pear_old) : false;
  817.     if (!which('pear', $old_dir)) {
  818.         print "
  819. ** The 'pear' command is not currently in your PATH, so you need to
  820. ** use '$pear_cmd' until you have added
  821. ** '$bin_dir' to your PATH environment variable.
  822.  
  823. ";
  824.  
  825.     print "Run it without parameters to see the available actions, try 'pear list'
  826. to see what packages are installed, or 'pear help' for help.
  827.  
  828. For more information about PEAR, see:
  829.  
  830.   http://pear.php.net/faq.php
  831.   http://cvs.php.net/co.php/pearweb/doc/pear_package_manager.txt?p=1
  832.   http://pear.php.net/manual/
  833.  
  834. Thanks for using go-pear!
  835.  
  836. ";
  837.     }
  838. }
  839.  
  840. if (WEBINSTALLER) {
  841.     print "Writing WebFrontend file ... ";
  842.        @unlink($webfrontend_file); //Delete old one
  843.     copy ( $doc_dir.DIRECTORY_SEPARATOR.
  844.             'PEAR_Frontend_Web'.DIRECTORY_SEPARATOR.
  845.             'docs'.DIRECTORY_SEPARATOR.
  846.             'example.php',
  847.             $webfrontend_file
  848.         );
  849.     if ($_GET['step'] == 'install-progress') {
  850.         displayHTMLProgress($progress = 100);
  851.         ob_end_clean();
  852.         displayHTMLInstallationSummary();
  853.         displayHTMLFooter();
  854.     } else {
  855.         $out = ob_get_contents();
  856.  
  857.         $out = explode("\n", $out);
  858.         foreach($out as $line => $value) {
  859.             if (preg_match('/ok$/', $value)) {
  860.                 $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value);
  861.             };
  862.             if (preg_match('/^install ok:/', $value)) {
  863.                 $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value);
  864.             };
  865.             if (preg_match('/^Warning:/', $value)) {
  866.                 $value = '<span style="color: #ff0000">'.$value.'</span>';
  867.             };
  868.             $out[$line] = $value;
  869.         };
  870.         $out = nl2br(implode("\n",$out));
  871.         ob_end_clean();
  872.  
  873.         displayHTML('install', $out);
  874.     }
  875.     // Little hack, this will be fixed in PEAR later
  876.     if ( WINDOWS ) {
  877.         clearstatcache();
  878.         @unlink($bin_dir.DIRECTORY_SEPARATOR.'.tmppear');
  879.     }
  880.     exit;
  881. }
  882.  
  883. // Little hack, this will be fixed in PEAR later
  884. if ( WINDOWS ) {
  885.     clearstatcache();
  886.     @unlink($bin_dir.DIRECTORY_SEPARATOR.'.tmppear');
  887. }
  888.  
  889. if (WINDOWS && !WEBINSTALLER) {
  890.     win32CreateRegEnv();
  891. }
  892. // Set of functions following
  893.  
  894. // {{{ download_url()
  895.  
  896. function download_url($url, $destfile = null, $proxy = null)
  897. {
  898.     $use_suggested_filename = ($destfile === null);
  899.     if ($use_suggested_filename) {
  900.         $destfile = basename($url);
  901.     }
  902.     $tmp = parse_url($url);
  903.     if (empty($tmp['port'])) {
  904.         $tmp['port'] = 80;
  905.     }
  906.     if (empty($proxy)) {
  907.         $fp = fsockopen($tmp['host'], $tmp['port'], $errno, $errstr);
  908.         //print "\nconnecting to $tmp[host]:$tmp[port]\n";
  909.     } else {
  910.         $tmp_proxy = parse_url($proxy);
  911.         $phost     = $tmp_proxy['host'];
  912.         $pport     = $tmp_proxy['port'];
  913.         $fp = fsockopen($phost, $pport, $errno, $errstr);
  914.         //print "\nconnecting to $phost:$pport\n";
  915.     }
  916.     if (!$fp) {
  917.         bail("download of $url failed: $errstr ($errno)\n");
  918.     }
  919.     if (empty($proxy)) {
  920.         $path = $tmp['path'];
  921.     } else {
  922.         $path = "http://$tmp[host]:$tmp[port]$tmp[path]";
  923.     }
  924.     if (isset($tmp['query'])) {
  925.         $path .= "?$tmp[query]";
  926.     }
  927.     if (isset($tmp['fragment'])) {
  928.         $path .= "#$tmp[fragment]";
  929.     }
  930.     $request = "GET $path HTTP/1.0\r\nHost: $tmp[host]:$tmp[port]\r\n".
  931.         "User-Agent: go-pear\r\n";
  932.  
  933.     if (!empty($proxy) && $tmp_proxy['user'] != '') {
  934.         $request .= 'Proxy-Authorization: Basic ' .
  935.                     base64_encode($tmp_proxy['user'] . ':' . $tmp_proxy['pass']) . "\r\n";
  936. //        print "\nauthenticating against proxy with : user = ${tmp_proxy['user']} \n";
  937. //        print "and pass = ${tmp_proxy['pass']}\n";
  938.     } // if
  939.     $request .= "\r\n";
  940.     fwrite($fp, $request);
  941.     $cdh = "content-disposition:";
  942.     $cdhl = strlen($cdh);
  943.     $content_length = 0;
  944.     while ($line = fgets($fp, 2048)) {
  945.         if (trim($line) == '') {
  946.             break;
  947.         }
  948.         if (preg_match('/^Content-Length: (.*)$/i', $line, $matches)) {
  949.             $content_length = trim($matches[1]);
  950.         };
  951.         if ($use_suggested_filename && !strncasecmp($line, $cdh, $cdhl)) {
  952.             if (eregi('filename="([^"]+)"', $line, $matches)) {
  953.                 $destfile = basename($matches[1]);
  954.             }
  955.         }
  956.     }
  957.     if ($content_length) {
  958.         displayHTMLSetDownload($destfile);
  959.     };
  960.     $wp = fopen($destfile, "wb");
  961.     if (!$wp) {
  962.         bail("could not open $destfile for writing\n");
  963.     }
  964.     $bytes_read = 0;
  965.     $progress = 0;
  966.     while ($data = fread($fp, 2048)) {
  967.         fwrite($wp, $data);
  968.         $bytes_read += strlen($data);
  969.         if ($content_length != 0 && floor($bytes_read * 10 / $content_length) != $progress) {
  970.             $progress = floor($bytes_read * 10 / $content_length);
  971.             displayHTMLDownloadProgress($progress * 10);
  972.         };
  973.     }
  974.     fclose($fp);
  975.     fclose($wp);
  976.     return $destfile;
  977. }
  978.  
  979. // }}}
  980. // {{{ which()
  981.  
  982. function which($program, $dont_search_in = false)
  983. {
  984.     if (WINDOWS) {
  985.         if ($_path=my_env('Path')) {
  986.             $dirs = explode(';', $_path);
  987.         } else {
  988.             $dirs = explode(';', my_env('PATH'));
  989.         }
  990.         if ($dont_search_in &&
  991.             ($key = array_search($dont_search_in, $dirs)) !== false)
  992.         {
  993.             unset($dirs[$key]);
  994.         }
  995.  
  996.         foreach ($dirs as $dir) {
  997.             $tmp = "$dir\\$program";
  998.             if (file_exists($ret = "$tmp.exe") ||
  999.                 file_exists($ret = "$tmp.com") ||
  1000.                 file_exists($ret = "$tmp.bat") ||
  1001.                 file_exists($ret = "$tmp.cmd")) {
  1002.                 return $ret;
  1003.             }
  1004.         }
  1005.     } else {
  1006.         $dirs = explode(':', my_env('PATH'));
  1007.         if ($dont_search_in &&
  1008.             ($key = array_search($dont_search_in, $dirs)) !== false)
  1009.         {
  1010.             unset($dirs[$key]);
  1011.         }
  1012.         foreach ($dirs as $dir) {
  1013.             if (is_executable("$dir/$program")) {
  1014.                 return "$dir/$program";
  1015.             }
  1016.         }
  1017.     }
  1018.     return false;
  1019. }
  1020.  
  1021. // }}}
  1022. // {{{ bail()
  1023.  
  1024. function bail($msg = '')
  1025. {
  1026.     global $ptmp, $origpwd;
  1027.     if ($ptmp && is_dir($ptmp)) {
  1028.         chdir($origpwd);
  1029.         rm_rf($ptmp);
  1030.     }
  1031.     if ($msg && WEBINSTALLER) {
  1032.         $msg = @ob_get_contents() ."\n\n". $msg;
  1033.         @ob_end_clean();
  1034.         displayHTML('error', $msg);
  1035.         exit;
  1036.     };
  1037.     if ($msg && !WEBINSTALLER) {
  1038.         die($msg);
  1039.     }
  1040. }
  1041.  
  1042. // }}}
  1043. // {{{ mkdir_p()
  1044.  
  1045. function mkdir_p($dir, $mode = 0777)
  1046. {
  1047.     $lastdir = '';
  1048.     if (@is_dir($dir)) {
  1049.         return true;
  1050.     }
  1051.     $parent = dirname($dir);
  1052.     $parent_exists = (int)@is_dir($parent);
  1053.     $ok = true;
  1054.     if (!@is_dir($parent) && $parent != $dir) {
  1055.         $ok = mkdir_p(dirname($dir), $mode);
  1056.     }
  1057.     if ($ok) {
  1058.         $ok = @mkdir($dir, $mode);
  1059.         if (!$ok) {
  1060.             print "mkdir failed: $dir\n";
  1061.         }
  1062.     }
  1063.     return $ok;
  1064. }
  1065.  
  1066. // }}}
  1067. // {{{ rm_rf()
  1068.  
  1069. function rm_rf($path)
  1070. {
  1071.     if (@is_dir($path)) {
  1072.         $dp = opendir($path);
  1073.         while ($ent = readdir($dp)) {
  1074.             if ($ent == '.' || $ent == '..') {
  1075.                 continue;
  1076.             }
  1077.             $file = $path . DIRECTORY_SEPARATOR . $ent;
  1078.             if (@is_dir($file)) {
  1079.                 rm_rf($file);
  1080.             } else {
  1081.                 unlink($file);
  1082.             }
  1083.         }
  1084.         closedir($dp);
  1085.         return rmdir($path);
  1086.     } else {
  1087.         return @unlink($path);
  1088.     }
  1089. }
  1090.  
  1091. // }}}
  1092. // {{{ tmpdir()
  1093. /*
  1094.  * Fixes for winXP/wrong tmp set by Urs Gehrig (urs@circle.ch)
  1095.  */
  1096. function tmp_dir()
  1097. {
  1098.     if (WINDOWS){
  1099.         if ( my_env('TEMP') ) {
  1100.             $_temp = my_env('TEMP');
  1101.         } elseif ( my_env('TMP') ) {
  1102.             $_temp = my_env('TMP');
  1103.         } elseif ( my_env('windir') ) {
  1104.             $_temp = my_env('windir') . '\temp';
  1105.         } elseif ( my_env('SystemRoot') ) {
  1106.             $_temp = my_env('SystemRoot') . '\temp';
  1107.         }
  1108.  
  1109.         // handle ugly ENV var like \Temp instead of c:\Temp
  1110.         $dirs = explode("\\", realpath($_temp));
  1111.         if(strpos($_temp, ":") != 1) {
  1112.             unset($_temp);
  1113.             $_dirs = array();
  1114.             foreach($dirs as $key => $val) {
  1115.                 if((boolean)$val ) {
  1116.                     $_dirs[] = str_replace("/", "",  $val);
  1117.                 }
  1118.             }
  1119.             unset($dirs);
  1120.             $dirs = $_dirs;
  1121.             array_unshift ($dirs, "c:" );
  1122.             $_temp = $dirs[0];
  1123.             for($i = 1;$i < count($dirs);$i++) {
  1124.                 $_temp .= "//" . $dirs[$i];
  1125.             }
  1126.         }
  1127.         $ptmp = $_temp;
  1128.         return $_temp;
  1129.     }
  1130.     if (my_env('TMPDIR')) {
  1131.         return my_env('TMPDIR');
  1132.     }
  1133.     return '/tmp';
  1134. }
  1135.  
  1136. // }}}
  1137. // {{{ my_env()
  1138. /*
  1139. (cox) In my system PHP 4.2.1 (both cgi & cli) $_ENV is empty
  1140.       but getenv() does work fine
  1141. */
  1142. function my_env($var)
  1143. {
  1144.     if (is_array($_ENV) && isset($_ENV[$var])) {
  1145.         return $_ENV[$var];
  1146.     }
  1147.     return getenv($var);
  1148. }
  1149.  
  1150. // }}}
  1151. // {{{ detect_install_dirs()
  1152.  
  1153. function detect_install_dirs($_prefix = null) {
  1154.     global $prefix, $bin_dir, $php_dir, $php_bin, $doc_dir, $data_dir, $test_dir;
  1155.     if (WINDOWS) {
  1156.         if ($_prefix === null) {
  1157.             $prefix = getcwd();
  1158.         } else {
  1159.             $prefix = $_prefix;
  1160.         }
  1161.  
  1162.         if (!@is_dir($prefix)) {
  1163.             if (@is_dir('c:\php4')) {
  1164.                 $prefix = 'c:\php4';
  1165.             } elseif (@is_dir('c:\php')) {
  1166.                 $prefix = 'c:\php';
  1167.             }
  1168.         }
  1169.  
  1170.         $bin_dir   = '$prefix';
  1171.         $php_dir   = '$prefix\pear';
  1172.         $doc_dir   = '$php_dir\docs';
  1173.         $data_dir  = '$php_dir\data';
  1174.         $test_dir  = '$php_dir\tests';
  1175.         /*
  1176.          * Detects php.exe
  1177.          */
  1178.         if( $t=getenv('PHP_PEAR_PHP_BIN') ){
  1179.                 $php_bin   = $t;
  1180.         } elseif ($t=getenv('PHP_BIN') ) {
  1181.             $php_bin   = $t;
  1182.         } elseif ( $t=which('php') ) {
  1183.             $php_bin = $t;
  1184.         } elseif ( is_file($prefix.'\cli\php.exe') ) {
  1185.             $php_bin = $prefix.'\cli\php.exe';
  1186.         } elseif ( is_file($prefix.'\php.exe') ) {
  1187.             $php_bin = $prefix.'\php.exe';
  1188.         }
  1189.         if( $php_bin && !is_file($php_bin) ){
  1190.             $php_bin = '';
  1191.         } else {
  1192.             if(!ereg(":",$php_bin)){
  1193.                 $php_bin = getcwd().DIRECTORY_SEPARATOR.$php_bin;
  1194.             }
  1195.         }
  1196.         if (!is_file($php_bin)) {
  1197.             if (is_file('c:/php/cli/php.exe')) {
  1198.                 $php_bin = 'c:/php/cli/php.exe';
  1199.             } elseif (is_file('c:/php4/cli/php.exe')) {
  1200.                 $php_bin = 'c:/php4/cli/php.exe';
  1201.             }
  1202.         }
  1203.     } else {
  1204.         if ($_prefix === null) {
  1205.             $prefix    = dirname(PHP_BINDIR);
  1206.         } else {
  1207.             $prefix = $_prefix;
  1208.         }
  1209.         $bin_dir   = '$prefix/bin';
  1210.         $php_dir   = '$prefix/share/pear';
  1211.         $doc_dir   = '$php_dir/docs';
  1212.         $data_dir  = '$php_dir/data';
  1213.         $test_dir  = '$php_dir/tests';
  1214.         // check if the user has installed PHP with PHP or GNU layout
  1215.         if (@is_dir("$prefix/lib/php/.registry")) {
  1216.             $php_dir = '$prefix/lib/php';
  1217.         } elseif (@is_dir("$prefix/share/pear/lib/.registry")) {
  1218.             $php_dir = '$prefix/share/pear/lib';
  1219.             $doc_dir   = '$prefix/share/pear/docs';
  1220.             $data_dir  = '$prefix/share/pear/data';
  1221.             $test_dir  = '$prefix/share/pear/tests';
  1222.         } elseif (@is_dir("$prefix/share/php/.registry")) {
  1223.             $php_dir = '$prefix/share/php';
  1224.         }
  1225.     }
  1226. }
  1227.  
  1228. // }}}
  1229. // {{{ displayHTMLHeader
  1230.  
  1231. function displayHTMLHeader()
  1232. {
  1233. ?>
  1234. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  1235. <html>
  1236. <head>
  1237.  <title>PEAR :: Installer :: Go-PEAR</title>
  1238.  <style type="text/css">
  1239.  <!--
  1240.     a {
  1241.         color:#000000;
  1242.         text-decoration: none;
  1243.     }
  1244.     a:visited {
  1245.         color:#000000;
  1246.         text-decoration: none;
  1247.     }
  1248.     a:active {
  1249.         color:#000000;
  1250.         text-decoration: none;
  1251.     }
  1252.     a:hover {
  1253.         color:#000000;
  1254.         text-decoration: underline;
  1255.     }
  1256.  
  1257.     a.green {
  1258.         color:#006600;
  1259.         text-decoration: none;
  1260.     }
  1261.     a.green:visited {
  1262.         color:#006600;
  1263.         text-decoration: none;
  1264.     }
  1265.     a.green:active {
  1266.         color:#006600;
  1267.         text-decoration: none;
  1268.     }
  1269.     a.green:hover {
  1270.         color:#006600;
  1271.         text-decoration: underline;
  1272.     }
  1273.  
  1274.     body, td, th {
  1275.         font-family: verdana,arial,helvetica,sans-serif;
  1276.         font-size: 90%;
  1277.     }
  1278.  
  1279.     p {
  1280.         font-family: verdana,arial,helvetica,sans-serif;
  1281.     }
  1282.  
  1283.     th.pack {
  1284.         color: #FFFFFF;
  1285.         background: #009933;
  1286.         text-align: right;
  1287.     }
  1288.  
  1289.     td.package_info_title {
  1290.         color: #006600;
  1291.         font-weight: bold;
  1292.     }
  1293.  
  1294.     th.others {
  1295.         color: #006600;
  1296.         text-align: left;
  1297.     }
  1298.  
  1299.     em {
  1300.         font-weight: bold;
  1301.         font-style: italic;
  1302.     }
  1303.  
  1304.     .green {
  1305.         color: #006600;
  1306.     }
  1307.     .red {
  1308.         color: #006600;
  1309.     }
  1310.  
  1311.     span.headline {
  1312.         font-family: verdana,arial,helvetica,sans-serif;
  1313.         font-size: 125%;
  1314.         font-weight: bold;
  1315.         color: #ffffff;
  1316.     }
  1317.  
  1318.     span.title {
  1319.         font-family: verdana,arial,helvetica,sans-serif;
  1320.         font-size: 110%;
  1321.         font-weight: bold;
  1322.         color: #006600;
  1323.     }
  1324.  
  1325.     .newsDate {
  1326.         font-size: 85%;
  1327.         font-style: italic;
  1328.         color: #66cc66;
  1329.     }
  1330.  
  1331.     .compact {
  1332.         font-family: arial, helvetica, sans-serif;
  1333.         font-size: 90%;
  1334.     }
  1335.  
  1336.     .menuWhite {
  1337.         font-family: verdana,arial,helvetica,sans-serif;
  1338.         font-size: 75%;
  1339.         color: #ffffff;
  1340.     }
  1341.     .menuBlack {
  1342.         font-family: verdana,arial,helvetica,sans-serif;
  1343.         text-decoration: none;
  1344.         font-weight: bold;
  1345.         font-size: 75%;
  1346.         color: #000000;
  1347.     }
  1348.  
  1349.     .sidebar {
  1350.         font-size: 85%;
  1351.     }
  1352.  
  1353.     code, pre, tt {
  1354.         font-family: Courier, "Courier New", monospace;
  1355.         font-size: 90%;
  1356.     }
  1357.  
  1358.     pre.php {
  1359.         border-color:       black;
  1360.         border-style:       dashed;
  1361.         border-width:       1px;
  1362.         background-color:   #eeeeee;
  1363.         padding:            5px;
  1364.     }
  1365.  
  1366.     h1 {
  1367.         font-family: verdana,arial,helvetica,sans-serif;
  1368.         font-size: 140%;
  1369.         font-weight: bold;
  1370.         color: #006600;
  1371.     }
  1372.  
  1373.     h2 {
  1374.         font-family: verdana,arial,helvetica,sans-serif;
  1375.         font-size: 125%;
  1376.         font-weight: bold;
  1377.         color: #006600;
  1378.     }
  1379.  
  1380.     h3 {
  1381.         font-family: verdana,arial,helvetica,sans-serif;
  1382.         font-size: 110%;
  1383.         font-weight: bold;
  1384.         color: #006600;
  1385.     }
  1386.  
  1387.     small {
  1388.         font-family: verdana,arial,helvetica,sans-serif;
  1389.         font-size: 75%;
  1390.     }
  1391.  
  1392.     a.small {
  1393.         font-family: verdana,arial,helvetica,sans-serif;
  1394.         font-size: 75%;
  1395.         text-decoration: none;
  1396.     }
  1397.  
  1398.     .tableTitle {
  1399.         font-family: verdana,arial,helvetica,sans-serif;
  1400.         font-weight: bold;
  1401.     }
  1402.  
  1403.     .tableExtras {
  1404.         font-family: verdana,arial,helvetica,sans-serif;
  1405.         font-size: 85%;
  1406.         color: #FFFFFF;
  1407.     }
  1408.  
  1409.     input {
  1410.         font-family: verdana,arial,helvetica,sans-serif;
  1411.     }
  1412.  
  1413.     textarea {
  1414.         font-family: verdana,arial,helvetica,sans-serif;
  1415.     }
  1416.  
  1417.     input.small, select.small {
  1418.         font-family: verdana,arial,helvetica,sans-serif;
  1419.         font-size: 75%;
  1420.     }
  1421.  
  1422.     textarea.small {
  1423.         font-family: verdana,arial,helvetica,sans-serif;
  1424.         font-size: 75%;
  1425.     }
  1426.  
  1427.     form {
  1428.         margin-bottom : 0;
  1429.     }
  1430.  -->
  1431.  </style>
  1432.  <meta name="description" content="This is the Web Interface of the PEAR Installer" />
  1433. </head>
  1434.  
  1435. <body   topmargin="0" leftmargin="0"
  1436.         marginheight="0" marginwidth="0"
  1437.         bgcolor="#ffffff"
  1438.         text="#000000"
  1439.         link="#006600"
  1440.         alink="#cccc00"
  1441.         vlink="#003300"
  1442. >
  1443. <?php
  1444. }
  1445.  
  1446. // }}}
  1447. // {{{ displayHTML
  1448.  
  1449. function displayHTML($page = 'Welcome', $data = array())
  1450. {
  1451.     global $pfc_packages;
  1452.  
  1453.     displayHTMLHeader();
  1454.  
  1455. ?>
  1456. <a name="TOP" /></a>
  1457. <table border="0" cellspacing="0" cellpadding="0" height="48" width="100%">
  1458.   <tr bgcolor="#339900">
  1459.     <td align="left" width="120">
  1460.       <img src="<?php echo basename(__FILE__); ?>?action=img&img=pearlogo" width="104" height="50" vspace="2" hspace="5" alt="PEAR">
  1461.     </td>
  1462.     <td align="left" valign="middle" width="20">
  1463.        
  1464.     </td>
  1465.     <td align="left" valign="middle">
  1466.       <span class="Headline">Go-PEAR</span>
  1467.     </td>
  1468.   </tr>
  1469.  
  1470.   <tr bgcolor="#003300"><td colspan="3"></td></tr>
  1471.  
  1472.   <tr bgcolor="#006600">
  1473.     <td align="right" valign="top" colspan="3">
  1474.         <span style="color: #ffffff">Version <?php echo GO_PEAR_VER; ?></span> <br />
  1475.     </td>
  1476.   </tr>
  1477.  
  1478.   <tr bgcolor="#003300"><td colspan="3"></td></tr>
  1479. </table>
  1480.  
  1481.  
  1482. <table cellpadding="0" cellspacing="0" width="100%">
  1483.  <tr valign="top">
  1484.   <td bgcolor="#f0f0f0" width="100">
  1485.    <table width="200" border="0" cellpadding="4" cellspacing="0">
  1486.     <tr valign="top">
  1487.      <td style="font-size: 90%" align="left" width="200">
  1488.        <br><br>
  1489.        <img src="<?php echo basename(__FILE__); ?>?action=img&img=smallpear" border="0">
  1490.        <a href="<?php echo basename(__FILE__); ?>?step=Welcome&restart=1" <?php if ($page == 'Welcome') echo ' class="green"'; ?>>
  1491.          Welcome to Go-PEAR
  1492.        </a><br/>
  1493.  
  1494.        <img src="<?php echo basename(__FILE__); ?>?action=img&img=smallpear" border="0">
  1495.        <a href="<?php echo basename(__FILE__); ?>?step=config" <?php if ($page == 'config') echo ' class="green"'; ?>>
  1496.          Configuration
  1497.        </a><br/>
  1498.  
  1499.        <img src="<?php echo basename(__FILE__); ?>?action=img&img=smallpear" border="0">
  1500. <?php if ($page == 'install') echo '<span class="green">'; ?>
  1501.           Complete installtion<br/>
  1502. <?php if ($page == 'install') echo '</span>'; ?>
  1503.  
  1504.      </td>
  1505.     </tr>
  1506.    </table>
  1507.   </td>
  1508.   <td bgcolor="#cccccc" width="1" background="/gifs/checkerboard.gif"></td>
  1509.   <td>
  1510.    <table width="100%" cellpadding="10" cellspacing="0">
  1511.     <tr>
  1512.      <td valign="top">
  1513.  
  1514. <table border="0">
  1515. <tr>
  1516.   <td width="20">
  1517.   </td>
  1518.   <td>
  1519. <?php
  1520.     if ($page == 'error') {
  1521. ?>
  1522.             <span class="title">Error</span><br/>
  1523.             <br/>
  1524. <?php
  1525.         $value = $data;
  1526.         if (preg_match('/ok$/', $value)) {
  1527.             $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value);
  1528.         }
  1529.         if (preg_match('/failed$/', $value)) {
  1530.             $value = preg_replace('/(failed)$/', '<span style="color: #ff0000">\1</span>', $value);
  1531.         }
  1532.         if (preg_match('/^install ok:/', $value)) {
  1533.             $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value);
  1534.         }
  1535.         if (preg_match('/^Warning:/', $value)) {
  1536.             $value = '<span style="color: #ff0000">'.$value.'</span>';
  1537.         }
  1538.  
  1539.         echo nl2br($value);
  1540.     } elseif ($page == 'Welcome') {
  1541. ?>
  1542.             <span class="title">Welcome to go-pear <?php echo GO_PEAR_VER; ?>!</span><br/>
  1543.             <br/>
  1544.             Go-pear will install the Web Frontend of the PEAR Installer and all the needed <br/>
  1545.             files. This frontend is your tool for PEAR installation and maintenance.<br/>
  1546.             <br/>
  1547.             Go-pear also lets you download and install the PEAR packages bundled<br/>
  1548.             with PHP: <?php echo implode(', ', $GLOBALS['pfc_packages']); ?>.<br/>
  1549.             <br/>
  1550.             <a href="<?php echo basename(__FILE__); ?>?step=config" class="green">Next >></a>
  1551. <?php
  1552.     } elseif ($page == 'config') {
  1553.         if (!empty($GLOBALS['http_proxy'])) {
  1554.             list($proxy_host, $proxy_port) = explode(':', $GLOBALS['http_proxy']);
  1555.         } else {
  1556.             $proxy_host = $proxy_port = '';
  1557.         }
  1558. ?>
  1559.             <form action="<?php echo basename(__FILE__);?>?step=install" method="post">
  1560.             <span class="title">Configuration</span><br/>
  1561.             <br/>
  1562.             HTTP proxy (host:port):
  1563.             <input type="text" name="proxy[host]" value="<?php echo $proxy_host;?>">
  1564.             <input type="text" name="proxy[port]" value="<?php echo $proxy_port;?>" size="6">
  1565.             <br/><br/><hr/><br/>
  1566.             Below is a suggested file layout for your new PEAR installation. <br/>
  1567.             <br/>
  1568.             <table border="0">
  1569.               <TR>
  1570.                 <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&img=note" border="0"></TD>
  1571.                 <TD>
  1572.                     <span class="green">
  1573.                     <b>Note:</b> Make sure that PHP has the permission to access the specified<br/>
  1574.                     directories.<br/><br/>
  1575.                   </span>
  1576.                 </TD>
  1577.               </TR>
  1578.             </table>
  1579.             <TABLE border="0">
  1580. <?php
  1581.     // Display error messages
  1582.         if (isset($GLOBALS['www_errors']) && sizeof($GLOBALS['www_errors']) ) {
  1583.             $www_errors = $GLOBALS['www_errors'];
  1584.             echo "<tr><td>";
  1585.             echo '<span class="red">ERROR(S):</span>';
  1586.             echo "</td></tr>";
  1587.             foreach ($www_errors as $n => $var) {
  1588.                 echo "<tr><td>";
  1589.                 echo '<span class="red">'.$GLOBALS['config_desc'][$n].': </span>';
  1590.                 echo "</td><td>";
  1591.                 echo '<span class="red">'.$www_errors[$n].'</span>';
  1592.                 echo "<br>\n";
  1593.                 echo "</td></tr>\n";
  1594.             }
  1595.         }
  1596.  
  1597.         foreach ($GLOBALS['config_vars'] as $n => $var) {
  1598.             printf('<tr><td>%d. %s</td><td><input type="text" name="config[%s]" value="%s"></td></tr>',
  1599.             $n,
  1600.             $GLOBALS['config_desc'][$var],
  1601.             $var,
  1602.             $GLOBALS[$var]);
  1603.         }
  1604. ?>
  1605.             </TABLE>
  1606.             <br/><hr/><br/>
  1607.             The following PEAR packages are common ones, and can be installed<br/>
  1608.             by go-pear too: <br/>
  1609. <?php    echo implode(', ', $GLOBALS['pfc_packages']);?>            .<br/>
  1610.             <input type="checkbox" name="install_pfc" <?php if($GLOBALS['install_pfc']) echo 'checked';?>> Install those too<br/>
  1611.             <br/><br/>
  1612.             <table border="0">
  1613.               <TR>
  1614.                 <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&img=note" border="0"></TD>
  1615.                 <TD>
  1616.                     <span class="green">
  1617.                       <b>Note:</b> Installation might take some time, because go-pear has to download<br/>
  1618.                       all needed files from pear.php.net. Just be patient and wait for the next<br/>
  1619.                       page to load.<br/>
  1620.                   </span>
  1621.                 </TD>
  1622.               </TR>
  1623.             </table>
  1624.             <br>
  1625.             <input type="checkbox" name="BCmode" id="BCmode" checked> Compatibility-Mode for old non-DOM Browsers<br/>
  1626.             <script type="text/javascript">
  1627.             <!--
  1628.                 if (document.getElementById('BCmode')) {
  1629.                     document.getElementById('BCmode').checked = 0;
  1630.                 };
  1631.             // -->
  1632.             </script>
  1633.  
  1634. <?php
  1635.         if (WINDOWS && phpversion() == '4.1.1') {
  1636. ?>
  1637.                     <table border="0">
  1638.                       <TR>
  1639.                         <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&img=note" border="0"></TD>
  1640.                         <TD>
  1641.                             <span style="color: #ff0000">
  1642.                               <b>Warning:</b> Your PHP version (4.1.1) might be imcompatible with go-pear due to a bug<br/>
  1643.                               in your PHP binary. If the installation crashes you might want to update your PHP version.</br>
  1644.                           </span>
  1645.                         </TD>
  1646.                       </TR>
  1647.                     </table>
  1648. <?php
  1649.         }
  1650. ?>
  1651.             <br/>
  1652.             <input type="submit" value="Install" onClick="javascript: submitButton.value='Downloading and installing ... please wait ...'" name="submitButton">
  1653.             </form>
  1654. <?php
  1655.     } elseif ($page == 'install') {
  1656. ?>
  1657.             <span class="title">Installation Complete - Summary</span><br/>
  1658. <?php
  1659.         displayHTMLInstallationSummary($data);
  1660.     } elseif ($page == 'preinstall') {
  1661. ?>
  1662.             <span class="title">Installation in progress ...</span><br/>
  1663.             <br/>
  1664.             <script language="javascript">
  1665.             <!--
  1666.  
  1667.                 var progress;
  1668.                 var downlodprogress;
  1669.                 progress = 0;
  1670.                 downloadprogress = 0;
  1671.  
  1672.                 function setprogress(value)
  1673.                 {
  1674.                     progress = value;
  1675.  
  1676.                     prog = document.getElementById('installation_progress');
  1677.                     prog.innerHTML = progress + " %";
  1678.                     progress2 = progress / 10;
  1679.                     progress2 = Math.floor(progress2);
  1680.                     for (i=0; i < 10; i++)
  1681.                         document.getElementById('progress_cell_'+i).style.backgroundColor = "#cccccc";
  1682.                     switch(progress2)
  1683.                     {
  1684.                         case 10:
  1685.                             document.getElementById('progress_cell_9').style.backgroundColor = "#006600";
  1686.                         case  9:
  1687.                             document.getElementById('progress_cell_8').style.backgroundColor = "#006600";
  1688.                         case  8:
  1689.                             document.getElementById('progress_cell_7').style.backgroundColor = "#006600";
  1690.                         case  7:
  1691.                             document.getElementById('progress_cell_6').style.backgroundColor = "#006600";
  1692.                         case  6:
  1693.                             document.getElementById('progress_cell_5').style.backgroundColor = "#006600";
  1694.                         case  5:
  1695.                             document.getElementById('progress_cell_4').style.backgroundColor = "#006600";
  1696.                         case  4:
  1697.                             document.getElementById('progress_cell_3').style.backgroundColor = "#006600";
  1698.                         case  3:
  1699.                             document.getElementById('progress_cell_2').style.backgroundColor = "#006600";
  1700.                         case  2:
  1701.                             document.getElementById('progress_cell_1').style.backgroundColor = "#006600";
  1702.                         case  1:
  1703.                             document.getElementById('progress_cell_0').style.backgroundColor = "#006600";
  1704.                     };
  1705.                 }
  1706.  
  1707.                 function addprogress(value)
  1708.                 {
  1709.                     progress += value;
  1710.                     setprogress(progress);
  1711.                 }
  1712.  
  1713.                 function setdownloadfile(value)
  1714.                 {
  1715.                     setdownloadprogress(0);
  1716.  
  1717.                     prog = document.getElementById('download_file');
  1718.                     prog.innerHTML = 'Downloading '+value+' ...';
  1719.                 };
  1720.  
  1721.                 function setdownloadprogress(value)
  1722.                 {
  1723.                     downloadprogress = value;
  1724.  
  1725.                     prog = document.getElementById('download_progress');
  1726.                     prog.innerHTML = downloadprogress + " %";
  1727.                     progress2 = downloadprogress / 10;
  1728.                     progress2 = Math.floor(progress2);
  1729.                     for (i=0; i < 10; i++)
  1730.                         document.getElementById('download_progress_cell_'+i).style.backgroundColor = "#cccccc";
  1731.                     switch(progress2)
  1732.                     {
  1733.                         case 10:
  1734.                             document.getElementById('download_progress_cell_9').style.backgroundColor = "#006600";
  1735.                         case  9:
  1736.                             document.getElementById('download_progress_cell_8').style.backgroundColor = "#006600";
  1737.                         case  8:
  1738.                             document.getElementById('download_progress_cell_7').style.backgroundColor = "#006600";
  1739.                         case  7:
  1740.                             document.getElementById('download_progress_cell_6').style.backgroundColor = "#006600";
  1741.                         case  6:
  1742.                             document.getElementById('download_progress_cell_5').style.backgroundColor = "#006600";
  1743.                         case  5:
  1744.                             document.getElementById('download_progress_cell_4').style.backgroundColor = "#006600";
  1745.                         case  4:
  1746.                             document.getElementById('download_progress_cell_3').style.backgroundColor = "#006600";
  1747.                         case  3:
  1748.                             document.getElementById('download_progress_cell_2').style.backgroundColor = "#006600";
  1749.                         case  2:
  1750.                             document.getElementById('download_progress_cell_1').style.backgroundColor = "#006600";
  1751.                         case  1:
  1752.                             document.getElementById('download_progress_cell_0').style.backgroundColor = "#006600";
  1753.                     };
  1754.                 };
  1755.  
  1756.             // -->
  1757.             </script>
  1758.             <table style="border-width: 1px; border-color: #000000" cellspacing="0" cellpadding="0">
  1759.             <tr>
  1760.               <td>
  1761.                 <table border="0">
  1762.                   <tr>
  1763.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_0"> </td>
  1764.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_1"> </td>
  1765.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_2"> </td>
  1766.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_3"> </td>
  1767.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_4"> </td>
  1768.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_5"> </td>
  1769.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_6"> </td>
  1770.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_7"> </td>
  1771.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_8"> </td>
  1772.                     <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_9"> </td>
  1773.                     <td bgcolor="#ffffff" width="10" height="20"> </td>
  1774.                     <td bgcolor="#ffffff" height="20" id="installation_progress" class="green">0 %</td>
  1775.                   </tr>
  1776.                 </table>
  1777.                 <br>
  1778.                 <table border="0">
  1779.                   <tr>
  1780.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_0"> </td>
  1781.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_1"> </td>
  1782.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_2"> </td>
  1783.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_3"> </td>
  1784.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_4"> </td>
  1785.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_5"> </td>
  1786.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_6"> </td>
  1787.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_7"> </td>
  1788.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_8"> </td>
  1789.                     <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_9"> </td>
  1790.                     <td bgcolor="#ffffff" width="10" height="20"> </td>
  1791.                     <td bgcolor="#ffffff" height="20" id="download_progress" class="green">0 %</td>
  1792.                     <td bgcolor="#ffffff" width="10" height="20"> </td>
  1793.                     <td bgcolor="#ffffff" height="20" id="download_file" class="green"></td>
  1794.                   </tr>
  1795.                 </table>
  1796.                 <br>
  1797.                 <iframe src="<?php echo basename(__FILE__); ?>?step=install-progress&<?php echo SID;?>" width="700" height="700" frameborder="0" marginheight="0" marginwidth="0"></iframe>
  1798.               </td>
  1799.             </tr>
  1800.             </table>
  1801. <?php
  1802.     }
  1803. ?>
  1804.   </td>
  1805. </tr>
  1806. </table>
  1807.  
  1808.  
  1809. </td>
  1810.     </tr>
  1811.    </table>
  1812.   </td>
  1813.  
  1814.  </tr>
  1815. </table>
  1816. <?php
  1817.     displayHTMLFooter();
  1818. }
  1819.  
  1820. // }}}
  1821. // {{{ displayHTMLFooter
  1822.  
  1823. function displayHTMLFooter()
  1824. {
  1825.     ?>
  1826.     </body>
  1827.     </html>
  1828.     <?php
  1829. };
  1830.  
  1831. // }}}
  1832. // {{{ displayHTMLInstallationSummary
  1833.  
  1834. function displayHTMLInstallationSummary($data = '')
  1835. {
  1836.     $next     = NULL;
  1837.     $prefix   = dirname($GLOBALS['webfrontend_file']);
  1838.     $doc_root = strip_magic_quotes($_SERVER['DOCUMENT_ROOT']);
  1839.     $file_dir = dirname(__FILE__);
  1840.     if ( WINDOWS ) {
  1841.         $prefix   = str_replace('/', '\\', strtolower($prefix));
  1842.         $doc_root = str_replace('/', '\\', strtolower($doc_root));
  1843.         $file_dir = str_replace('/', '\\', strtolower($file_dir));
  1844.     }
  1845.  
  1846.     if ($doc_root && substr($prefix, 0, strlen($doc_root)) == $doc_root) {
  1847.         $next = substr($prefix, strlen($doc_root)).'/index.php';
  1848.     } else if ($file_dir && substr($prefix, 0, strlen($file_dir)) == $file_dir) {
  1849.         $next = substr($prefix, strlen($file_dir)).'/index.php';
  1850.     }
  1851.  
  1852.     if ($data) {
  1853.         echo "<br/>".$data;
  1854.     }
  1855. ?>
  1856.             <br/>
  1857.             <table border="0">
  1858.               <TR>
  1859.                 <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&img=note" border="0"></TD>
  1860.                 <TD>
  1861.                     <span class="green">
  1862.                   <b>Note:</b> To use PEAR without any problems you need to add your<br/>
  1863.                   PEAR Installation path (<?php echo $GLOBALS['php_dir']; ?>)<br>
  1864.                   to your <a href="http://www.php.net/manual/en/configuration.directives.php#ini.include_path">include_path</a>.<br/>
  1865.                       <br/>
  1866.                   Using a .htaccess file or directly edit httpd.conf would be working solutions<br/>
  1867.                   for Apache running servers, too.<br/>
  1868.                   </span>
  1869.                 </TD>
  1870.               </TR>
  1871.             </table>
  1872.             <br/>
  1873.             For more information about PEAR, see:<br/>
  1874.             <a href="http://pear.php.net/faq.php" target="_new" class="green">PEAR FAQ</a><br/>
  1875.             <a href="http://pear.php.net/manual/" target="_new" class="green">PEAR Manual</a><br/>
  1876.             <br/>
  1877.             Thanks for using go-pear!<br/>
  1878.             <br/>
  1879. <?php
  1880.     if ($next === NULL) {
  1881. ?>
  1882.                     <table border="0">
  1883.                       <TR>
  1884.                         <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&img=note" border="0"></TD>
  1885.                         <TD>
  1886.                             <span style="color: #ff0000">
  1887.                             <b>Warning:</b> Go-PEAR was not able to determine the URL to the newly<br/>
  1888.                             installed Web Frontend of the PEAR Installer. Please access it manually.<br/>
  1889.                             Since you specified the prefix, you should know how to do so.<br/>
  1890.                           </span>
  1891.                         </TD>
  1892.                       </TR>
  1893.                     </table>
  1894. <?php
  1895.     } else {
  1896.         if ($_GET['step'] == 'install-progress') {
  1897. ?>
  1898.                         <a href="<?php echo $next;?>" class="green" target="_parent">Start Web Frontend of the PEAR Installer >></a>
  1899. <?php
  1900.         } else {
  1901. ?>
  1902.                         <a href="<?php echo $next;?>" class="green">Start Web Frontend of the PEAR Installer >></a>
  1903. <?php
  1904.         }
  1905.     }
  1906. }
  1907.  
  1908. // }}}
  1909. // {{{ strip_magic_quotes
  1910.  
  1911. function strip_magic_quotes($value)
  1912. {
  1913.     if (ini_get('magic_quotes_gpc')) {
  1914.         return stripslashes($value);
  1915.     }
  1916.     return $value;
  1917. };
  1918.  
  1919. // }}}
  1920. // {{{ showImage
  1921.  
  1922. function showImage($img)
  1923. {
  1924.     $images = array(
  1925.         'smallpear' => array(
  1926.             'type' => 'gif',
  1927.             'data' => 'R0lGODlhEQATAMQAAAAAACqUACiTAC2WAC+YAzKZBTSaBsHgszOZADCYADmcB4TCZp3Ohtfrzd/v1+by4PD47DaaAz+fDUijF2WyOlCoHvT58VqtJPn893y+S/v9+f7//f3+/Pz9+////////ywAAAAAEQATAAAFkqAnjiR5NGXqcdpCoapnMVRdWbEHUROVVROYalHJTCaVAKWTcjAUGckgQY04SJAFMhJJIL5e4a5I6X6/gwlkRIwOzucAY9SYZBRvOCKheIwYFxR5enxCLhVeemAHbBQVg4SMIoCCinsKVyIOdlKKAhQcJFpGiWgFQiIYPxeJCQEEcykcDIgDAwYUkjEWB70NGykhADs=',
  1928.             ),
  1929.         'pearlogo' => array(
  1930.             'type' => 'gif',
  1931.             'data' => 'R0lGODlhaAAyAMT/AMDAwP3+/TWaAvD47Pj89vz++zebBDmcBj6fDEekFluvKmu3PvX68ujz4XvBS8LgrNXqxeHw1ZnPaa/dgvv9+cLqj8LmltD2msnuls3xmszwmf7+/f///wAAAAAAAAAAACH5BAEAAAAALAAAAABoADIAQAX/ICCOZGmeaKqubOtWWjwJphLLgH1XUu//C1Jisfj9YLEKQnSY3GaixWQqQTkYHM4AMulNLJFC9pEwIW/odKU8cqTfsWoTTtcomU4ZjbR4ZP+AgYKCG0EiZ1AuiossEhwEXRMEg5SVWQ6MmZqKWD0QlqCUEHubpaYlExwRPRZioZZVp7KzKQoSDxANDLsNXA5simd2FcQYb4YAc2jEU80TmAAIztPCMcjKdg4OEsZJmwIWWQPQI4ikIwtoVQnddgrv8PFlCWgYCwkI+fp5dkvJ/IlUKMCy6tYrDhNIIKLFEAWCTxse+ABD4SClWA0zovAjcUJFi6EwahxZwoGqHhFA/4IqoICkyxQSKkbo0gDkuBXV4FRAJkRCnTgi2P28IcEfk5xpWppykFJVuScmEvDTEETAVJ6bEpypcADPkz3pvKVAICHChkC7siQ08zVqu4Q6hgIFEFZuEn/KMgRUkaBmAQs+cEHgIiHVH5EAFpIgW4+NT6LnaqhDwe/Ov7YOmWZp4MkiAWBIl0kAVsJWuzcYpdiNgddc0E8cKBAu/FElBwagMb88ZZKDRAkWJtkWhHh3wwUbKHQJN3wQAaXGR2LpArv5oFHRR34C7Mf6oLXZNfqBgNI7oOLhj1f8PaGpygHQ0xtP8MDVKwYTSKcgxr9/hS6/pCCAAg5M4B9/sWh1YP9/XSgQWRML/idBfKUc4IBET9lFjggKhDYZAELZJYEBI2BDB3ouNBEABwE8gAwiCcSYgAKqPdEVAG7scM8BPPZ4AIlM+OgjAgpMhRE24OVoBwsIFEGFA7ZkQQBWienWxmRa7XDjKZXhBdAeSmKQwgLuUVLICa6VEKIGcK2mQWoVZHCBXJblJUFkY06yAXlGsPIHBEYdYiWHb+WQBgaIJqqoHFNpgMGB7dT5ZQuG/WbBAIAUEEFNfwxAWpokTIXJAWdgoJ9kRFG2g5eDRpXSBpEIF0oEQFaZhDbaSFANRgqcJoEDRARLREtxOQpsPO906ZUeJgjQB6dZUPBAdwcF8KLXXRVQaKFcsRRLJ6vMiiCNKxRE8ECZKgUA3Va4arOAAqdGRWO7uMZH5AL05gvsjQbg6y4NCjQ1kw8TVGcbdoKGKx8j3bGH7nARBArqwi0gkFJBrZiXBQRbHoIgnhSjcEBKfD7c3HMhz+JIQSY3t8GGKW+SUhfUajxGzKd0IoHBNkNQK86ZYEqdzYA8AHQpqXRUm80oHs1CAgMoBxzRqvzs9CIKECC1JBp7enUpfXHApwVYNAfo16c4IrYPLVdSAJVob7IAtCBFQGHcs/RRdiUDPHA33oADEAIAOw==',
  1932.             ),
  1933.         'note' => array(
  1934.             'type' => 'png',
  1935.             'data' => 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAAAAADFHGIkAAAAAmJLR0QAAKqNIzIAAAEESURBVHjaZZIhksMwDEV9voWFSwsLA0MLDf8VdARBUUNBQ1FBHcErZ5M0baXJjOPnb0vfLuMMn3H+lWMgBKL89A1Eq9Q9IrwB+gIOsnMPBR8giMclguQfBGS8x5xIoPQxnxqb4LL/eQ4l2AVNONP2ZshLCqJ3qqzWtT5pNgNnLU4OcNbuiqaLmFmHGhJ0TCMC99+f2wphlhaOYjuQVc0IIzLH2BRWfQoWsNSjct8AVop4rF3belTuVAb3MRj6kLrcTwtIy+g03V1vC57t1XrMzqfP5pln5yLTkk7+5UhstvOni1X3ixLEdf2c36+W0Q7kOb48hnSRLI/XdNPfX4kpMkgP5R+elfdkDPprQgAAAEN0RVh0U29mdHdhcmUAQCgjKUltYWdlTWFnaWNrIDQuMi44IDk5LzA4LzAxIGNyaXN0eUBteXN0aWMuZXMuZHVwb250LmNvbZG6IbgAAAAqdEVYdFNpZ25hdHVyZQAzYmQ3NDdjNWU0NTgwNzAwNmIwOTBkZDNlN2EyNmM0NBTTk/oAAAAOdEVYdFBhZ2UAMjR4MjQrMCswclsJMQAAAABJRU5ErkJggg==',
  1936.             ),
  1937.         );
  1938.  
  1939.     Header('Content-Type: image/'.$images[$img]['type']);
  1940.     echo base64_decode($images[$img]['data']);
  1941. };
  1942.  
  1943. // }}}
  1944. // {{{ displayHTMLProgress
  1945.  
  1946. function displayHTMLProgress($progress)
  1947. {
  1948.     if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) {
  1949.         return;
  1950.     };
  1951.     $msg = ob_get_contents();
  1952.     ob_end_clean();
  1953.  
  1954.     $msg = explode("\n", $msg);
  1955.     foreach($msg as $key => $value) {
  1956.         if (preg_match('/ok$/', $value)) {
  1957.             $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value);
  1958.         };
  1959.         if (preg_match('/failed$/', $value)) {
  1960.             $value = preg_replace('/(failed)$/', '<span style="color: #ff0000">\1</span>', $value);
  1961.         };
  1962.         if (preg_match('/^install ok:/', $value)) {
  1963.             $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value);
  1964.         };
  1965.         if (preg_match('/^Warning:/', $value)) {
  1966.             $value = '<span style="color: #ff0000">'.$value.'</span>';
  1967.         };
  1968.         $msg[$key] = $value;
  1969.     };
  1970.     $msg = implode('<br>', $msg);
  1971.  
  1972.     $msg.='<script type="text/javascript"> parent.setprogress('.((int) $progress).');  </script>';
  1973.  
  1974.     echo $msg;
  1975.     ob_start();
  1976. };
  1977.  
  1978. // }}}
  1979. // {{{ displayHTMLDownloadProgress
  1980.  
  1981. function displayHTMLDownloadProgress($progress)
  1982. {
  1983.     if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) {
  1984.         return;
  1985.     };
  1986.     $msg = ob_get_contents();
  1987.     ob_end_clean();
  1988.  
  1989.     echo '<script type="text/javascript"> parent.setdownloadprogress('.((int) $progress).');  </script>';
  1990.  
  1991.     ob_start();
  1992.     echo $msg;
  1993. };
  1994.  
  1995. // }}}
  1996. // {{{ displayHTMLSetDownload
  1997.  
  1998. function displayHTMLSetDownload($file)
  1999. {
  2000.     if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) {
  2001.         return;
  2002.     };
  2003.     $msg = ob_get_contents();
  2004.     ob_end_clean();
  2005.  
  2006.     echo '<script type="text/javascript"> parent.setdownloadfile("'.$file.'");  </script>';
  2007.  
  2008.     ob_start();
  2009.     echo $msg;
  2010. };
  2011.  
  2012. // }}}
  2013. // {{{ win32BrowseForFolder
  2014.  
  2015. /*
  2016.  * Create a vbs script to browse the getfolder dialog, called
  2017.  * by cscript, if it's available.
  2018.  * $label is the label text in the header of the dialog box
  2019.  *
  2020.  * TODO:
  2021.  * - Do not show Control panel
  2022.  * - Replace WSH with calls to w32 as soon as callbacks work
  2023.  * @Author Pierrre-Alain Joye
  2024.  */
  2025. function win32BrowseForFolder ( $label )
  2026. {
  2027.     global $ptmp;
  2028.     static $wshSaved=false;
  2029.     static $cscript='';
  2030. $wsh_browserfolder = 'Option Explicit
  2031. Dim ArgObj, var1, var2, sa, sFld
  2032. Set ArgObj = WScript.Arguments
  2033. Const BIF_EDITBOX = &H10
  2034. Const BIF_NEWDIALOGSTYLE = &H40
  2035. Const BIF_RETURNONLYFSDIRS   = &H0001
  2036. Const BIF_DONTGOBELOWDOMAIN  = &H0002
  2037. Const BIF_STATUSTEXT         = &H0004
  2038. Const BIF_RETURNFSANCESTORS  = &H0008
  2039. Const BIF_VALIDATE           = &H0020
  2040. Const BIF_BROWSEFORCOMPUTER  = &H1000
  2041. Const BIF_BROWSEFORPRINTER   = &H2000
  2042. Const BIF_BROWSEINCLUDEFILES = &H4000
  2043. Const OFN_LONGNAMES = &H200000
  2044. Const OFN_NOLONGNAMES = &H40000
  2045. Const ssfDRIVES = &H11
  2046. Const ssfNETWORK = &H12
  2047. Set sa = CreateObject("Shell.Application")
  2048. var1=ArgObj(0)
  2049. Set sFld = sa.BrowseForFolder(0, var1, BIF_EDITBOX + BIF_VALIDATE + BIF_BROWSEINCLUDEFILES + BIF_RETURNFSANCESTORS+BIF_NEWDIALOGSTYLE , ssfDRIVES )
  2050. if not sFld is nothing Then
  2051.     if not left(sFld.items.item.path,1)=":" Then
  2052.         WScript.Echo sFld.items.item.path
  2053.     Else
  2054.         WScript.Echo "invalid"
  2055.     End If
  2056. Else
  2057.     WScript.Echo "cancel"
  2058. End If
  2059. ';
  2060.     if( !$wshSaved){
  2061.         $cscript = $ptmp.DIRECTORY_SEPARATOR."bf.vbs";
  2062.         $fh = fopen($cscript,"wb+");
  2063.         fwrite($fh,$wsh_browserfolder,strlen($wsh_browserfolder));
  2064.         fclose($fh);
  2065.         $wshSaved  = true;
  2066.     }
  2067.     exec('cscript '.$cscript.' "'.$label.'" //noLogo',$arPath);
  2068.     if($arPath[0]=='' || $arPath[0]=='cancel'){
  2069.         return '';
  2070.     } elseif ($arPath[0]=='invalid') {
  2071.         echo "Invalid Path.\n";
  2072.         return '';
  2073.     }
  2074.     return $arPath[0];
  2075. }
  2076.  
  2077. // }}}
  2078. // {{{ win32CreateRegEnv
  2079.  
  2080. /*
  2081.  * Generates a registry addOn for Win32 platform
  2082.  * This addon set PEAR environment variables
  2083.  * @Author Pierrre-Alain Joye
  2084.  */
  2085. function win32CreateRegEnv(){
  2086.     global $prefix, $bin_dir, $php_dir, $php_bin, $doc_dir, $data_dir, $test_dir;
  2087.     $nl = "\r\n";
  2088.     $reg ='REGEDIT4'.$nl.
  2089.             '[HKEY_CURRENT_USER\Environment]'.$nl.
  2090.             '"PHP_PEAR_SYSCONF_DIR"="'.addslashes($prefix).'"'.$nl.
  2091.             '"PHP_PEAR_INSTALL_DIR"="'.addslashes($php_dir).'"'.$nl.
  2092.             '"PHP_PEAR_DOC_DIR"="'.addslashes($doc_dir).'"'.$nl.
  2093.             '"PHP_PEAR_BIN_DIR"="'.addslashes($bin_dir).'"'.$nl.
  2094.             '"PHP_PEAR_DATA_DIR"="'.addslashes($data_dir).'"'.$nl.
  2095.             '"PHP_PEAR_PHP_BIN"="'.addslashes($php_bin).'"'.$nl.
  2096.             '"PHP_PEAR_TEST_DIR"="'.addslashes($test_dir).'"'.$nl;
  2097.     //$path = dirname(__FILE__).DIRECTORY_SEPARATOR;
  2098.     $fh = fopen($prefix.DIRECTORY_SEPARATOR.'PEAR_ENV.reg','wb');
  2099.     if($fh){
  2100.         fwrite($fh, $reg ,strlen($reg));
  2101.         fclose($fh);
  2102.         echo "
  2103.  
  2104. * WINDOWS ENVIRONMENT VARIABLES *
  2105. For convenience, a REG file is available under $prefix\\PEAR_ENV.reg .
  2106. This file creates ENV variables for the current user.
  2107.  
  2108. Double-click this file to add it to the current user registry.
  2109.  
  2110. ";
  2111.     }
  2112. }
  2113.  
  2114. // }}}
  2115. // {{{ win32DetectPHPSAPI
  2116.  
  2117. /*
  2118.  * Try to detect the kind of SAPI used by the
  2119.  * the given php.exe.
  2120.  * @Author Pierrre-Alain Joye
  2121.  */
  2122. function win32DetectPHPSAPI()
  2123. {
  2124.     global $php_bin;
  2125.     if($php_bin!=''){
  2126.         exec($php_bin.' -v', $res);
  2127.         if(is_array($res)) {
  2128.             if( isset($res[0]) && strpos($res[0],"(cli)")) {
  2129.                 return 'cli';
  2130.             }
  2131.             if( isset($res[0]) && strpos($res[0],"cgi")) {
  2132.                 return 'cgi';
  2133.             } else {
  2134.                 return 'unknown';
  2135.             }
  2136.         }
  2137.     }
  2138. }
  2139.  
  2140. // }}}
  2141. // {{{ getPhpiniPath
  2142.  
  2143. /*
  2144.  * Get the php.ini file used with the current
  2145.  * process or with the given php.exe
  2146.  *
  2147.  * Horrible hack, but well ;)
  2148.  *
  2149.  * Not used yet, will add the support later
  2150.  * @Author Pierre-Alain Joye <paj@pearfr.org>
  2151.  */
  2152. function getPhpiniPath()
  2153. {
  2154.     $pathIni = get_cfg_var('cfg_file_path');
  2155.     if( $pathIni && is_file($pathIni) ){
  2156.         return $pathIni;
  2157.     }
  2158.  
  2159.     // Oh well, we can keep this too :)
  2160.     // I dunno if get_cfg_var() is safe on every OS
  2161.     if (WINDOWS) {
  2162.         // on Windows, we can be pretty sure that there is a php.ini
  2163.         // file somewhere
  2164.         do {
  2165.             $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini';
  2166.             if ( @file_exists($php_ini) ) break;
  2167.             $php_ini = 'c:\winnt\php.ini';
  2168.             if ( @file_exists($php_ini) ) break;
  2169.             $php_ini = 'c:\windows\php.ini';
  2170.         } while (false);
  2171.     } else {
  2172.         $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini';
  2173.     }
  2174.  
  2175.     if( @is_file($php_ini) ){
  2176.         return $php_ini;
  2177.     }
  2178.  
  2179.     // We re running in hackz&troubles :)
  2180.     ob_implicit_flush(false);
  2181.     ob_start();
  2182.     phpinfo(INFO_GENERAL);
  2183.     $strInfo = ob_get_contents ();
  2184.     ob_end_clean();
  2185.     ob_implicit_flush(true);
  2186.  
  2187.     if ( php_sapi_name() != 'cli' ) {
  2188.         $strInfo = strip_tags($strInfo,'<td>');
  2189.         $arrayInfo  = explode("</td>", $strInfo );
  2190.         $cli = false;
  2191.     } else {
  2192.         $arrayInfo = explode("\n",$strInfo);
  2193.         $cli = true;
  2194.     }
  2195.  
  2196.     foreach($arrayInfo as $val){
  2197.         if ( strpos($val,"php.ini") ) {
  2198.             if($cli){
  2199.                 list(,$pathIni) = explode('=>',$val);
  2200.             } else {
  2201.                 $pathIni = strip_tags(trim($val) );
  2202.             }
  2203.             $pathIni = trim($pathIni);
  2204.             if(is_file($pathIni)){
  2205.                 return $pathIni;
  2206.             }
  2207.         }
  2208.     }
  2209.  
  2210.     return false;
  2211. }
  2212.  
  2213. // }}}
  2214. // {{{ alterPhpIni
  2215.  
  2216. /*
  2217.  * Not optimized, but seems to work, if some nice
  2218.  * peardev will test it? :)
  2219.  *
  2220.  * @Author Pierre-Alain Joye <paj@pearfr.org>
  2221.  */
  2222. function alterPhpIni($pathIni='')
  2223. {
  2224.     global $php_dir, $prefix;
  2225.  
  2226.     $iniSep = WINDOWS?';':':';
  2227.  
  2228.     if( $pathIni=='' ){
  2229.         $pathIni =  getphpinipath();
  2230.     }
  2231.  
  2232.     $arrayIni = file($pathIni);
  2233.     $i=0;
  2234.     $found=0;
  2235.  
  2236.     // Looks for each active include_path directives
  2237.     foreach ( $arrayIni as $iniLine ) {
  2238.         $iniLine = trim($iniLine);
  2239.         $iniLine = str_replace(array("\n","\r"),array(),$iniLine);
  2240.         if( preg_match("/^include_path/",$iniLine) ){
  2241.             $foundAt[] = $i;
  2242.             $found++;
  2243.         }
  2244.         $i++;
  2245.     }
  2246.  
  2247.     if ( $found ) {
  2248.         $includeLine = $arrayIni[$foundAt[0]];
  2249.         list(,$currentPath)=explode('=',$includeLine);
  2250.  
  2251.         $currentPath = trim($currentPath);
  2252.         if(substr($currentPath,0,1)=='"'){
  2253.             $currentPath = substr($currentPath,1,strlen($currentPath)-2);
  2254.         }
  2255.  
  2256.         $arrayPath = explode($iniSep, $currentPath);
  2257.         if( $arrayPath[0]=='.' ){
  2258.             $newPath[0] = '.';
  2259.             $newPath[1] = $php_dir;
  2260.             array_shift($arrayPath);
  2261.         } else {
  2262.             $newPath[0] = $php_dir;
  2263.         }
  2264.  
  2265.         foreach( $arrayPath as $path ){
  2266.             $newPath[]= $path;
  2267.         }
  2268.     } else {
  2269.         $newPath[0] = '.';
  2270.         $newPath[1] = $php_dir;
  2271.  
  2272.     }
  2273.     $nl = WINDOWS?"\r\n":"\n";
  2274.     $includepath = 'include_path="'.implode($iniSep,$newPath).'"';
  2275.     $newInclude =   "$nl$nl;***** Added by go-pear$nl".
  2276.                     $includepath.
  2277.                     $nl.";*****".
  2278.                     $nl.$nl;
  2279.  
  2280.     $arrayIni[$foundAt[0]] =  $newInclude;
  2281.  
  2282.     for( $i=1; $i<$found; $i++){
  2283.         $arrayIni[$foundAt[$i]]=';'.trim($arrayIni[$foundAt[$i]]);
  2284.     }
  2285.  
  2286.     $newIni = implode("",$arrayIni);
  2287.     if ( !($fh = @fopen($pathIni, "wb+")) ){
  2288.         $prefixIni = $prefix.DIRECTORY_SEPARATOR."php.ini-gopear";
  2289.         $fh = fopen($prefixIni, "wb+");
  2290.         if ( !$fh ) {
  2291.             echo
  2292. "
  2293. ******************************************************************************
  2294. WARNING!  I cannot write to $pathIni nor in $prefix/php.ini-gopear. Please
  2295. modify manually your php.ini by adding:
  2296.  
  2297. $includepath
  2298.  
  2299. ";
  2300.             return false;
  2301.         } else {
  2302.             fwrite($fh, $newIni, strlen($newIni));
  2303.             fclose($fh);
  2304.             echo
  2305. "
  2306. ******************************************************************************
  2307. WARNING!  I cannot write to $pathIni, but I succesfully created a php.ini
  2308. under <$prefix/php.ini-gopear>. Please replace the file <$pathIni> with
  2309. <$prefixIni> or modify your php.ini by adding:
  2310.  
  2311. $includepath
  2312.  
  2313. ";
  2314.  
  2315.         }
  2316.     } else {
  2317.         fwrite($fh, $newIni, strlen($newIni));
  2318.         fclose($fh);
  2319.         echo "
  2320. php.ini <$pathIni> include_path updated.
  2321. ";
  2322.     }
  2323.     return true;
  2324. }
  2325. ?>
  2326.